package com.herui.iot.utils;

import android.app.Activity;
import android.content.Context;
import android.graphics.Point;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.WindowManager;

import com.herui.sdyu_lib.utils.LogUtils;

import androidx.annotation.RequiresApi;

/**
 * Created by amanda.shan on 2022/5/22.
 */
public class ScreenUtils {

    public static DisplayMetrics getDisplayMetrics(Context context) {
        DisplayMetrics metric = context.getResources().getDisplayMetrics();
        return metric;
    }

    //获取整个屏幕的宽
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    public static int getWidth(Activity mActivity){
        Point point = new Point();
        mActivity.getWindowManager().getDefaultDisplay().getRealSize(point);
        return point.x;
    }

    //获取整个屏幕的高
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    public static int getHeight(Activity mActivity){
        Point point = new Point();
        mActivity.getWindowManager().getDefaultDisplay().getRealSize(point);
        return point.y;
    }

    //获取dpi
    public static int getDensityDpi(Context context){
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        return dm.densityDpi;
    }

    //获取px和dp转化倍数值
    public static float getDensity(Context context){
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        return dm.density;
    }

    /**
     * 得到屏幕的物理尺寸，由于该尺寸是在出厂时，厂商写死的，所以仅供参考
     * 计算方法：获取到屏幕的分辨率:point.x和point.y，再取出屏幕的DPI（每英寸的像素数量），
     * 计算长和宽有多少英寸，即：point.x / dm.xdpi，point.y / dm.ydpi，屏幕的长和宽算出来了，
     * 再用勾股定理，计算出斜角边的长度，即屏幕尺寸。
     * @param context
     * @return
     */
    public static double getPhysicsScreenSize(Context context){
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        manager.getDefaultDisplay().getRealSize(point);
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int densityDpi = dm.densityDpi;//得到屏幕的密度值，但是该密度值只能作为参考，因为他是固定的几个密度值。
        LogUtils.d("densityDpi:"+densityDpi);
        double x = Math.pow(point.x / dm.xdpi, 2);//dm.xdpi是屏幕x方向的真实密度值，比上面的densityDpi真实。
        double y = Math.pow(point.y / dm.ydpi, 2);//dm.xdpi是屏幕y方向的真实密度值，比上面的densityDpi真实。
        double screenInches = Math.sqrt(x + y);
        return screenInches;
    }

    public static double mmPerPix(Context context){
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        manager.getDefaultDisplay().getRealSize(point);
        DisplayMetrics dm = context.getResources().getDisplayMetrics();

        return 25.4f/dm.xdpi;
    }
}
